package cn.chiship.framework.common.util;

import cn.chiship.sdk.core.util.DateUtils;
import cn.chiship.sdk.core.util.RandomUtil;
import cn.chiship.sdk.core.util.StringUtil;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 编号生产工具
 *
 * @author lijian
 */
public class CodeGenerationUtil {

    private final static String FORMAT_CODE_THREE = "000";
    private final static String FORMAT_CODE_FIVE = "00000";
    private static String date = new SimpleDateFormat("yyyyMMdd").format(new Date());

    /**
     * 生成组织编码
     *
     * @param type         类型 1：机构  2：部门
     * @param codePre      编号前缀
     * @param serialNumber 流水号
     */
    public static String generateOrgCode(Byte type, String codePre, long serialNumber) {
        if (StringUtil.isNullOrEmpty(codePre)) {
            codePre = "";
        } else {
            if (codePre.indexOf("-") > -1) {
                codePre = codePre.substring(2);
            }
        }
        return type + "-" + codePre + serialNumberFmt(serialNumber, FORMAT_CODE_THREE);
    }


    /**
     * 生成订单编号
     *
     * @param serialNumber 流水号
     */
    public static String generateOrderId(long serialNumber) {
        return date + RandomUtil.number(4) + serialNumberFmt(serialNumber, FORMAT_CODE_FIVE);
    }

    private static String serialNumberFmt(long serialNumber, String fmt) {
        DecimalFormat dft = new DecimalFormat(fmt);
        String code = dft.format(serialNumber);
        return code;
    }
}
